﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using AccesoDatos;
using System.Xml;

namespace RMA.Pantallas
{
    public partial class frmMantenimientoTicket : Form
    {
        DataTable dtUser = null;

        public frmMantenimientoTicket()
        {
            InitializeComponent();
        }

        public frmMantenimientoTicket(DataTable _dtUser)
        {
            dtUser = _dtUser;
            InitializeComponent();
        }
        
        clsMantenimiento objeto;

        XmlDocument doc;

        Manejador_Mantenimiento manejador = new Manejador_Mantenimiento();

        private void limpiar(Form a)
        {
            foreach (object obj in a.Controls)
            {
                if (obj is GroupBox)
                {
                    foreach (object obj1 in ((GroupBox)obj).Controls)
                    {
                        if (obj1 is TextBox)
                        {
                            ((TextBox)obj1).Text = "";
                        }
                    }
                }
                if (obj is TextBox) { ((TextBox)obj).Text = ""; }
                if (obj is Label) { if (((Label)obj).Name.Substring(1, 3) == "lbl") { ((Label)obj).Text = ""; } }

            }
            dataGridView1.DataSource = "";
        }

        private void establecer_valores(clsMantenimiento variable) 
        {
            try
            {
                string temporal = txtBusqueda.Text.Trim();
                limpiar(this);
                txtBusqueda.Text = temporal;
                txtSucursal.Text = variable.Sucursal;
                txtOrden.Text = variable.Orden_servicio;
                dtpFecha.Text = variable.Fecha_registro.ToShortDateString();
                cmbStatus.Text = variable.Status;
                txtRecepcion.Text = variable.Recepcion;
                txtEntrada.Text = variable.Entrada;
                txtProducto.Text = variable.Producto;
                txtDescripcion.Text = variable.Descripcion;
                txtSerie.Text = variable.Serie;
                txtCliente.Text = variable.Cliente;
                txtNombreCliente.Text = variable.Nombre_cliente;
                txtTelefono.Text = variable.Telefono;
                txtFactura.Text = variable.Factura;
                txtFechaFactura.Text = variable.Fech_factura;
                txtCosto.Text = variable.Costo_fac;
                txtTraspaso.Text = variable.Traspaso;
                txtSalida.Text = variable.Salida;
                txtTramite.Text = variable.Tramite;
                txtFalla.Text = variable.Falla;
                observ.Text = variable.Observacion;
                txtProductoRep.Text = variable.Producto_reposision;
                txtDescripcionRep.Text = variable.Descripcion_producto_reposicion;
                txtSerieRep.Text = variable.Serie_reposicion;
                txtCostoRep.Text = variable.Costo_reposicion;
                txtFechaRep.Text = variable.Fecha_reposicion.ToShortDateString();
                cmbProveedor.Text = variable.Proveedor;
                txtRm.Text = variable.Rm_compra;
                txtReferencia.Text = variable.Referencia_compra;
                dtpFechaRm.Value = DateTime.Parse(variable.Fecha_compra.ToShortDateString());
                dataGridView1.DataSource = manejador.Movimientos_folio(variable.Orden_servicio);
                txtAccesorios.Text = variable.Accesorios;
                txt_costoprov.Text = variable.Costo_compra;
                habilitar(true);
            }catch(Exception)
            {
                MessageBox.Show("No se encontraron datos", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                habilitar(false);
            }

        }

        private void modificar_valores() 
        {
            objeto.Producto = txtProducto.Text.Trim();
            objeto.Entrada = txtEntrada.Text.Trim();
            objeto.Serie = txtSerie.Text.Trim();
            objeto.Traspaso = txtTraspaso.Text.Trim();
            objeto.Salida = txtSalida.Text.Trim();
            objeto.Tramite = txtTramite.Text.Trim();
            objeto.Falla = txtFalla.Text.Trim();
            objeto.Producto_reposision = txtProductoRep.Text.Trim();
            objeto.Serie_reposicion = txtSerieRep.Text.Trim();
            objeto.Costo_reposicion = txtCostoRep.Text.Trim();
            objeto.Rm_compra = txtRm.Text.Trim();
            objeto.Referencia_compra = txtReferencia.Text.Trim();
            objeto.Fecha_compra = DateTime.Parse(dtpFechaRm.Value.ToShortDateString());
            objeto.Proveedor = cmbProveedor.SelectedValue.ToString();
            objeto.Estatus = cmbStatus.SelectedValue.ToString();
        }

        private void habilitar(bool op)
        {
            if (op)
            {
                btnEditar.Enabled = true;
                btnCancelar.Enabled = true;
                BtnAcc.Enabled = true;
                BtnInfoEnvio.Enabled = true;
                btnObsr.Enabled = true;
                btnobrseg.Enabled = true;
            }
            else 
            {
                btnEditar.Enabled = false;
                btnCancelar.Enabled = false;
                BtnAcc.Enabled = false;
                BtnInfoEnvio.Enabled = false;
                btnObsr.Enabled = false;
                btnobrseg.Enabled = false;
            }
        }

        private void editar(bool op) 
        {
            if (op)
            {
                txtProducto.Enabled = true;
                txtEntrada.Enabled = true;
                txtSerie.Enabled = true;
                txtTraspaso.Enabled = true;
                txtSalida.Enabled = true;
                txtTramite.Enabled = true;
                txtFalla.Enabled = true;
                txtProductoRep.Enabled = true;
                txtSerieRep.Enabled = true;
                txtCostoRep.Enabled = true;
                txtRm.Enabled = true;
                txtReferencia.Enabled = true;
                cmbStatus.Enabled = true;
            }
            else 
            {
                txtProducto.Enabled = false;
                txtEntrada.Enabled = false;
                txtSerie.Enabled = false;
                txtTraspaso.Enabled = false;
                txtSalida.Enabled = false;
                txtTramite.Enabled = false;
                txtFalla.Enabled = false;
                txtProductoRep.Enabled = false;
                txtSerieRep.Enabled = false;
                txtCostoRep.Enabled = false;
                txtRm.Enabled = false;
                txtReferencia.Enabled = false;
                cmbStatus.Enabled = false;
            }
        }

        private XmlDocument crear_XML() 
        {
            XmlDocument documento = new XmlDocument();
            XmlDeclaration declaracion = documento.CreateXmlDeclaration("1.0", "utf-8", null);
            XmlElement roornode = documento.CreateElement("XML");
            documento.InsertBefore(declaracion, documento.DocumentElement);
            documento.AppendChild(roornode);
                      
            XmlElement parentNode = documento.CreateElement("detalles");
            
            documento.DocumentElement.PrependChild(parentNode);
            
            foreach (object xx in this.Controls) 
            {
                if (xx is GroupBox)
                {
                    foreach (object obj in ((GroupBox)xx).Controls)
                    {
                        if (obj is TextBox)
                        {
                            // crear nodos requeridos
                            XmlElement nodoCampoModificado = documento.CreateElement("Campo");
                            XmlElement nodoInformacionanterior = documento.CreateElement("Informacion");
                            // Valor nodos requeridos
                            XmlText valor1 = documento.CreateTextNode(((TextBox)obj).Name);
                            XmlText valor2 = documento.CreateTextNode(((TextBox)obj).Text);
                            // agregar nodos al xml
                            parentNode.AppendChild(nodoCampoModificado);
                            parentNode.AppendChild(nodoInformacionanterior);
                            // guardar los valores en los nodos secundarios
                            nodoCampoModificado.AppendChild(valor1);
                            nodoInformacionanterior.AppendChild(valor2);
                        }
                    }
                }
            }
            return documento;
            //documento.Save(@"C:\text.xml");            
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {            
            editar(false);
            if (txtBusqueda.Text.Trim().Length == 0)
            {
                MessageBox.Show("Introducir criterio de busqueda", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                habilitar(false);
                txtBusqueda.Focus();
            }
            else 
            {
                objeto = new clsMantenimiento();
                

                if (rbtSerie.Checked)
                {
                    objeto.Serie = txtBusqueda.Text.Trim();
                    objeto = manejador.Informacion_ticket("0", "0", "0",objeto.Serie);
                    establecer_valores(objeto);
                    

                }
                if (rbtEntrada.Checked)
                {
                    objeto.Entrada = txtBusqueda.Text.Trim();
                    objeto = manejador.Informacion_ticket("0",objeto.Entrada,"0", "0");
                    establecer_valores(objeto);
                    
                }
                if (rbtSalida.Checked) 
                {
                    objeto.Salida = txtBusqueda.Text.Trim();
                    objeto = manejador.Informacion_ticket("0","0",objeto.Salida, "0");
                    establecer_valores(objeto);
                    
                }
                if (rbtOrdenServicio.Checked) 
                {
                   
                    objeto.Orden_servicio = txtBusqueda.Text.Trim();                    
                    objeto = manejador.Informacion_ticket(objeto.Orden_servicio,"0","0","0");
                    establecer_valores(objeto); 
                }
                
                
            }
        }

        private void frmMantenimientoTicket_Load(object sender, EventArgs e)
        {            

            rbtOrdenServicio.Checked = true;
            cmbStatus.DataSource= manejador.Estatus();
            cmbStatus.DisplayMember = "estatus_descripcion";
            cmbStatus.ValueMember = "estatus_id";
            cmbProveedor.DataSource = manejador.Proveedores();
            cmbProveedor.DisplayMember = "Nombre";
            cmbProveedor.ValueMember = "CodPro";            
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            doc = crear_XML();
            editar(true);            
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            string strUser = "";
            if (dtUser.Rows.Count != 0)
            {
                DataRow[] drUsuarios = dtUser.Select();

                strUser = drUsuarios[0].ItemArray[0].ToString();
                if (strUser.Length == 1)
                {
                    strUser = "0" + strUser;
                }
                
            }

            modificar_valores();
            if (manejador.guardar(objeto, strUser, doc))
            {
                editar(false);                                                
                btnBuscar_Click(sender, e);
            }
            else 
            {
                MessageBox.Show("Aviso", "No se pudo realizar la operacion intente de nuevo", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            frmCancelaTicket a = new frmCancelaTicket(objeto.Orden_servicio,frmPrincipal.IdUsr);
            a.ShowDialog();
            btnBuscar_Click(sender, e);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            panel1.Visible = false;
            habilitar(true);
        }

        private void BtnAcc_Click(object sender, EventArgs e)
        {
            lbltitulopanel.Text = "Accesorios";
            txtAccesorios.Visible = true;
            dtgObservacionesRep.Visible = false;
            panel1.Visible = true;
            habilitar(false);
        }

        private void btnObsr_Click(object sender, EventArgs e)
        {
            //dtgObservacionesRep.DataSource=manejador.Observacion_recepcion(objeto.Orden_servicio);
            //lbltitulopanel.Text = "Observaciones";
            //txtAccesorios.Visible = false;
            //dtgObservacionesRep.Visible = true;
            //panel1.Visible = true;
            //habilitar(false);

            frm_Mantenimiento_Seg_Recepcion rec = new frm_Mantenimiento_Seg_Recepcion(objeto.Orden_servicio);
            rec.ShowDialog();
        }

        private void BtnInfoEnvio_Click(object sender, EventArgs e)
        {
            string strOrdenServicio = "";
            if (objeto.Orden_servicio.Substring(0, 1) == "0")
            {
                strOrdenServicio = objeto.Orden_servicio.Substring(1,objeto.Orden_servicio.Length - 1);
                frm_Mantenimiento_Seguimiento_envio a = new frm_Mantenimiento_Seguimiento_envio(strOrdenServicio);
                a.ShowDialog();
            }
            else
            {
                frm_Mantenimiento_Seguimiento_envio a = new frm_Mantenimiento_Seguimiento_envio(objeto.Orden_servicio);
                a.ShowDialog();
            }

            
        }

        private void btnobrseg_Click(object sender, EventArgs e)
        {
            frm_Mantenimiento_Seg_Observaciones a = new frm_Mantenimiento_Seg_Observaciones(objeto.Orden_servicio,frmPrincipal.IdUsr);
            a.ShowDialog();
        }
    }
}
